package org.lc.cmd.connect;

import org.jline.reader.ParsedLine;
import org.lc.cmd.CmdParam;
import org.lc.cmd.CmdSession;
import org.lc.cmd.Command;

import java.io.IOException;
import java.util.List;
import java.util.Map;

public interface ClientSession extends CmdSession {
    /**
     * 连接到服务端
     */
    void connect() throws IOException;

    /**
     * 发送请求
     *
     * @param line 原始命令字符串
     */
    ClientRequest createRequest(String line);

    /**
     * 发送请求
     *
     * @param command 命令
     * @param subCommand 子命令，可以是空串
     * @param args 参数
     */
    ClientRequest createRequest(String command, String subCommand, Map<String, String> args);

    /**
     * 获取当前可用的命令
     * 运行期间，可用的命令可能会变化，因此每次执行新命令前需要重新获取当前可用的命令
     * 注意，此时命令参数不一定都可用
     */
    List<Command> getEnabledCommands();

    /**
     * 获取可用参数
     *
     * @param parsedLine 当前输入的行，包含光标位置等信息
     */
    List<CmdParam> getEnabledParams(ParsedLine parsedLine);
}
